package framework
{
	import mx.collections.ArrayCollection;
	import mx.core.FlexGlobals;
	import mx.rpc.AbstractOperation;
	import mx.rpc.AsyncResponder;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	import common.constants.AppConstants;
	import common.constants.LangPkgConstants;
	import common.entities.LogInfo;
	
	import utils.SharedObjectUtil;
	import utils.XMLUtil;

	public class AppGlobal
	{
		/**远程对象**/
		public static var ro:AmfRemoteObject = new AmfRemoteObject("systemService");
		
		/**参数集合**/
		public static var params:ArrayCollection;
		
		/**数据字典集合**/
		public static var dataDicts:ArrayCollection;
		
		/**登陆用户信息**/
		public static var userInfo:Object;
		
		/**正在调用的后台方法**/
		public static var invokeMethods:Array = [];
		
		/**站点起始路径**/
		public static var contextRoot:String;
		
		/**当前使用的语言，默认为中文**/
		public static var currentLang:String = "chn";
		
		/**配置文件**/
		public static var config:XML;
		
		/**本地保存信息**/
		public static var cookies:Object;
		
		/**是否开启效果播放**/
		public static var effectOn:Boolean = true;
		
		/**写操作日志信息**/
		public static var logInfo:LogInfo = new LogInfo();
		
		/**
		 * 系统初始化函数
		 */
		public static function init(p_callback:Function):void
		{
			//生成站点起始路径
			var fullUrl:String = FlexGlobals.topLevelApplication.url;
			contextRoot = fullUrl.substring(0, fullUrl.indexOf("flex"));
			//读取本地sharedobject配置
			cookies = SharedObjectUtil.getInfo(AppConstants.SYSTEM);
			//加载配置文件
			XMLUtil.loadXML("flex/config/config.xml", loadConfigHandler);
			//获取登陆用户信息
			var method:AbstractOperation = ro.getOperation("getLoginUserInfo");
			var token:AsyncToken = method.send();
			token.addResponder(new AsyncResponder(resultHandler, faultHandler, token));
			
			/**
			 * 成功获取用户信息回调函数
			 * @param p_result 成功事件
			 * @param p_token 调用远程服务标记
			 * @return
			 */
			function resultHandler(p_result:ResultEvent, p_token:AsyncToken):void
			{
				var result:Object = p_result.result;
				if(result){
					userInfo = result;
					if(p_callback != null)
						p_callback();
				}
			}
			
			/**
			 * 获取用户信息失败回调函数
			 * @param p_fault 调用失败事件
			 * @param p_token 调用远程服务标记
			 * @return
			 */
			function faultHandler(p_fault:FaultEvent, p_token:AsyncToken):void
			{
				trace("获取用户信息失败：" + p_fault.fault.faultString);
			}
		}
		
		/**
		 * 加载配置文件完成 后处理函数
		 */
		private static function loadConfigHandler(p_xml:XML):void
		{
			config = p_xml;
			//初始化系统类
			PollingBroker.init();
			NetworkChecker.init();
			//加载基础语言包
			LangMgr.loadLangPkg(LangPkgConstants.BASE);
		}
	}
}